GORM 是一個用於 Go 語言的物件關聯映射(Object Relational Mapping,簡稱 ORM)庫,主要用來將 Go 程式中的結構體(struct)與資料庫中的表格(table)進行映射。它可以幫助我們更方便地操作資料庫,而不用直接撰寫 SQL 語句。
這裡我們也可以參考官方文擋的介紹(📎參考連結)
好那我們知道 GORM 是用來更方便的操作資料庫,那接著我們來介紹下一篇會用到的 PostgreSQL 吧!
特性 | PostgreSQL | MySQL |
---|---|---|
開源性 | 完全開源 | 完全開源 |
資料庫技術 | 物件型關聯式資料庫管理系統 | 純粹的關聯式資料庫管理系統 |
ACID 支援 | 完全支援 | 部分支持(MyISAM 不支援) |
擴展性 | 高度擴展,支援自定義數據型別、函數等 | 擴展性有限,插件化但不如 PostgreSQL 強大 |
數據型別 | 支援 JSONB、HSTORE、ARRAY 等複雜數據型別 | 支援 JSON,但對其他複雜型別支援較弱 |
全文檢索 | 內建全文檢索 | 需使用外部插件來實現 |
查詢優化 | 查詢優化器強大,支援複雜查詢如 CTE | 查詢優化器較為基本,對複雜查詢支持不足 |
儲存引擎 | 單一引擎,設計專注一致性與性能 | 支援多個儲存引擎(如 InnoDB、MyISAM) |
複製與高可用性 | 支援同步和非同步複製,進階分區支持 | 支援主從複製,Galera Cluster 支援同步複製 |
安全性 | 支援行級安全性與詳細權限控制 | 不支援行級安全性,權限控制較粗粒度 |
性能 | 對讀多寫少的場景效能優異 | 在讀寫比例均衡或寫多的情境中效能不錯 |
初學者難度 | 略高,因為功能較豐富 | 相對簡單,因為功能較少 |
其實可以看出 Postgres 整體上的豐富度都是更好的選擇,雖然性能略輸給 MySQL,但是除非你有特殊工作需求,或是你服務的是全球性的大型企業,但其實像 Instagram 也是使用 Postgres 開發的,所以其實也不太準確就是了。
而且 Postgres 還能夠透過分片來實現水平擴展,部分場景下還能取代 redis 和 kafka 的功能,所以我覺得選擇使用 PostgreSQL 算是一個蠻不錯的選擇。
以上操作皆在 Mac 上執行
# 安裝 PostgreSQL
brew install postgresql
# 啟動 PostgreSQL 服務
brew services start postgresql
# 初始化數據庫
sudo mkdir -p /usr/local/var/postgres
sudo chown -R $(whoami) /usr/local/var/postgres
initdb /usr/local/var/postgres
# 安裝 Homebrew 的 services 插件
brew tap homebrew/services
# 啟動 PostgreSQL 服務
brew services start postgresql
# 停止服務
brew services stop postgresql
# 重新啟動服務
brew services restart postgresql
# 創建一個名為 postgres 的角色並賦予其超級用戶權限
createuser -s postgres
通常在初次安裝並初始化 PostgreSQL 後,會自動創建一個名為
postgres
的超級用戶角色。如果這個角色未被創建,才需要手動創建一個。
psql postgres
# 在連接時使用不同的<角色名稱> : <資料庫名稱>
psql -U postgres postgres
# 查詢 PostgreSQL 的角色
psql -c "\du"
psql postgres
# 創建一個資料庫叫 postgres
CREATE DATABASE postgres;
# 賦予用戶權限
GRANT ALL PRIVILEGES ON DATABASE postgres TO postgres;
然後我們再開一個 Terminal 來確保有正常連接上我們的資料庫。
# -d <資料庫名稱> : -U <用戶名稱>
psql -d postgres -U postgres
那如果想從圖形化介面查看我們資料庫的狀態,我個人是習慣用 pgAdmin
或是 TablePlus
來做查看資料表的動作,那我用 pgAdmin
做示範看到下面這樣就算成功了。